﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
using MAntLibrary;

namespace MAnt3.dll
{
    class Rosso : IDodavatel
    {
        #region Property
        public string nextLine = "\r\n";
        string[] _DostupnostNazevArr = new string[] { "Skladem", "Není Skladem" };

        private IOproudy ioproudy;
        public IOproudy Ioproudy
        {
            get{return ioproudy;}
            set{ioproudy = value;}
        }

        public string[] GetDostupnostNazev()
        {
            return _DostupnostNazevArr;
        }
        #endregion

        #region Constructor
        public Rosso(IOproudy io)
        {
            Ioproudy = io;
        }
        #endregion

        #region Method
        public List<ZboziNetDirect> CtiXml(XmlNode root, FileInfo file, Dodavatel dodavatel)
        {
            // nactu cislo pozice pokud je potreba
            int counter = 0;
            if (Ioproudy.ulozeno) { counter = Ioproudy.pozice; }
            ZboziNetDirect zbozi;
            List<ZboziNetDirect> result = new List<ZboziNetDirect>();

            // pruchod vnorenymi uzly korenoveho elementu
            foreach (XmlNode lNode in root.ChildNodes)
            {
                // popreskakuju pokud byl nacten rozpracovany soubor
                if (Ioproudy.ulozeno && counter > 0)
                {
                    counter--;
                    continue;
                }

                zbozi = new ZboziNetDirect();
                if (lNode.Name.Equals("SHOPITEM"))
                {
                    //ted jsem v uzlu SHOPITEM a zpracuju jednotlive hodnoty
                    XmlNodeList deti = lNode.ChildNodes;
                    counter++;
                    foreach (XmlNode d in deti)
                    {
                        if (d.Name.Equals("SKU")) { zbozi.IdZbozi = d.InnerText; zbozi.KodZbozi = d.InnerText; continue; }
                        if (d.Name.Equals("PRODUCT")) { zbozi.JmenoVyrobku = d.InnerText; continue; }
                        if (d.Name.Equals("DESCRIPTION"))
                        {
                            zbozi.Popis = d.InnerText;
                            zbozi.KratkyPopis = d.InnerText;
                            continue;
                        }
                        if (d.Name.Equals("IMGURL")) { zbozi.JmenoObrazku = d.InnerText; continue; }
                        if (d.Name.Equals("PRICE_VAT")) { zbozi.PuvodniCena = d.InnerText; zbozi.setNovaCena(dodavatel.SlevaProDodavatele); continue; }

                        /* PARAMETRY */
                        if (d.Name.Equals("WIDTH")) { zbozi.Width = d.InnerText; continue; }
                        if (d.Name.Equals("HEIGHT")) { zbozi.Height = d.InnerText; continue; }
                        if (d.Name.Equals("LENGTH")) { zbozi.Length = d.InnerText; continue; }

                        if (d.Name.Equals("COLOR")) { zbozi.Color = d.InnerText; continue; }
                        if (d.Name.Equals("COLOR_DETAIL")) { zbozi.Color_detail = d.InnerText; continue; }

                        if (d.Name.Equals("MATERIAL")) { zbozi.Material = d.InnerText; continue; }
                        if (d.Name.Equals("ROOM")) { zbozi.Room = d.InnerText; continue; }

                        if (d.Name.Equals("DELIVERY_DATE")) { zbozi.Delivery_date = d.InnerText; continue; }

                        if (d.Name.Equals("AVAILABILITY")) { zbozi.Dostupnost = d.InnerText; continue; }
                    }

                }
                //MainWindow.NactenySeznam.Add(zbozi);
                result.Add(zbozi);
            }

            // aktualizuji pocet polozek
            //MainWindow.PocetPolozek = MainWindow.NactenySeznam.Count;
            return result;
        }

        public string ZobrazInformace(List<ZboziNetDirect> list, int pocitadlo)
        {
            string temp = string.Empty;

            temp += "rozměry: " + list[pocitadlo].Width + " x " + list[pocitadlo].Height + " x " + list[pocitadlo].Length + " (v x š x h)" + nextLine;

            temp += "barva: " + list[pocitadlo].Color + nextLine;

            temp += "barva - typ: " + list[pocitadlo].Color_detail + nextLine;

            temp += "materiál: " + list[pocitadlo].Material + nextLine;

            temp += "typ: " + list[pocitadlo].Room + nextLine;

            temp += "doručení: " + list[pocitadlo].Delivery_date + nextLine;

            return temp;
        }

        public void UlozData(List<ZboziNetDirect> list, int pocitadlo, ref ZboziNetDirect noveZbozi)
        {
            noveZbozi.Height = list[pocitadlo - 1].Height;
            noveZbozi.Width = list[pocitadlo - 1].Width;
            noveZbozi.Length = list[pocitadlo - 1].Length;

            noveZbozi.Color = list[pocitadlo - 1].Color;
            noveZbozi.Color_detail = list[pocitadlo - 1].Color_detail;

            noveZbozi.Material = list[pocitadlo - 1].Material;
            noveZbozi.Room = list[pocitadlo - 1].Room;

            noveZbozi.Delivery_date = list[pocitadlo - 1].Delivery_date;
        }

        public void GenerujParametry(string path, string znacka, List<ZboziNetDirect> ZboziNetDirList, string timeStamp)
        {
            string filename = "\\" + znacka + "-" + "Parametry" + "-" + timeStamp + ".xml";
            FileStream fs = new FileStream(path + filename, FileMode.Create);
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;

            XmlWriter w = XmlWriter.Create(fs, settings);

            w.WriteStartDocument();
            w.WriteStartElement("parametry");
            w.WriteAttributeString("manufacturer", "netdirect");
            w.WriteAttributeString("version", "09.01");
            w.WriteAttributeString("bVlozit", "1");
            w.WriteAttributeString("bOpravit", "1");
            w.WriteAttributeString("bKompletniXml", "1");
            w.WriteAttributeString("sIdZbozi", "sKodZbozi");

            //cyklus
            for (int i = 0; i < ZboziNetDirList.Count; i++)
            {
                // ROZMERY
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "rozměry (v x š x h)");

                w.WriteElementString("sJednotkaParametru", "cm");
                w.WriteElementString("sPopisParametru", "rozměr nábytku");
                w.WriteElementString("sIdZbozi", ZboziNetDirList[i].IdZbozi);

                // Hodnota parametru
                string temp = ZboziNetDirList[i].Height + " x " + ZboziNetDirList[i].Width + " x " + ZboziNetDirList[i].Length;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", temp); //100-bila
                }

                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();

                // BARVY
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "barvy");

                w.WriteElementString("sJednotkaParametru", " ");
                w.WriteElementString("sPopisParametru", "barva nábytku");
                w.WriteElementString("sIdZbozi", ZboziNetDirList[i].IdZbozi);




                // Hodnota parametru
                temp = ZboziNetDirList[i].Color;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", ZboziNetDirList[i].Color); //100-bila
                }







                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();

                // BARVY DETAIL
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "barvy - detail");

                w.WriteElementString("sJednotkaParametru", " ");
                w.WriteElementString("sPopisParametru", "detail barvy nábytku");
                w.WriteElementString("sIdZbozi", ZboziNetDirList[i].IdZbozi);



                // Hodnota parametru
                temp = ZboziNetDirList[i].Color_detail;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", ZboziNetDirList[i].Color_detail); //100-bila
                }





                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();

                // MATERIAL
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "materiály");

                w.WriteElementString("sJednotkaParametru", " ");
                w.WriteElementString("sPopisParametru", "materiál nábytku");
                w.WriteElementString("sIdZbozi", ZboziNetDirList[i].IdZbozi);


                // Hodnota parametru
                temp = ZboziNetDirList[i].Material;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", ZboziNetDirList[i].Material); //100-bila
                }




                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();

                // TYP
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "typ");

                w.WriteElementString("sJednotkaParametru", " ");
                w.WriteElementString("sPopisParametru", "typ nábytku");
                w.WriteElementString("sIdZbozi", ZboziNetDirList[i].IdZbozi);



                // Hodnota parametru
                temp = ZboziNetDirList[i].Room;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", ZboziNetDirList[i].Room); //100-bila
                }




                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();
            }

            w.WriteEndElement();
            w.WriteEndDocument();
            w.Flush();
            fs.Close();
        }
        #endregion


        public void VytvorXML(string destinationPath, string jmenoDodavatele, List<ZboziNetDirect> UpravenySeznam)
        {
            throw new NotImplementedException();
        }
    }
}
